home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2003 November A / PCWK1103A.iso / ABBYY FineReader 7.0 PRO / data1.cab / gs_pdfwr.ps < prev    next >
Text File  |  2002-02-23  |  16KB  |  495 lines

  1. %    Copyright (C) 1996, 2000 Aladdin Enterprises.  All rights reserved.
  2. % This software is provided AS-IS with no warranty, either express or
  3. % implied.
  4. % This software is distributed under license and may not be copied,
  5. % modified or distributed except as expressly authorized under the terms
  6. % of the license contained in the file LICENSE in this distribution.
  7. % For more information about licensing, please refer to
  8. % http://www.ghostscript.com/licensing/. For information on
  9. % commercial licensing, go to http://www.artifex.com/licensing/ or
  10. % contact Artifex Software, Inc., 101 Lucas Valley Road #110,
  11. % San Rafael, CA  94903, U.S.A., +1(415)492-9861.
  12.  
  13. % $Id: gs_pdfwr.ps,v 1.11.2.1 2002/02/22 19:45:55 ray Exp $
  14. % PDF writer additions to systemdict.
  15.  
  16. % This file should be included iff the pdfwrite "device" is included
  17. % in the executable.
  18.  
  19. % ---------------- Predefined configurations ---------------- %
  20.  
  21. % These correspond to the 3 predefined settings in Acrobat Distiller 4,
  22. % plus a "default" setting.
  23.  
  24. % Parameters common to all configurations.
  25. % Note that we don't set AlwaysEmbed or NeverEmbed, since the default values
  26. % depend on the CompatibilityLevel and are initialized internally.
  27. /.defaultImageDict mark
  28.   /QFactor 0.9 /Blend 1
  29.   /HSamples [2 1 1 2] /VSamples [2 1 1 2]
  30. .dicttomark readonly def
  31. /.distillercommon mark
  32.   /ASCII85EncodePages false
  33.   /AntiAliasColorImages false
  34.   /AntiAliasGrayImages false
  35.   /AntiAliasMonoImages false
  36.   /AutoFilterColorImages true
  37.   /AutoFilterGrayImages true
  38.   /AutoFilterMonoImages true
  39.   /AutoPositionEPSFiles true
  40.   /Binding /Left
  41.     % What to do about the CalxxxProfiles?
  42.   /ColorACSImageDict .defaultImageDict
  43.   /ColorImageDepth -1
  44.   /ColorImageDict .defaultImageDict
  45.   /ColorImageDownsampleThreshold 1.5
  46.   /ColorImageFilter /DCTEncode
  47.   /CompressPages true
  48.   /ConvertImagesToIndexed true
  49.   /DefaultRenderingIntent /Default
  50.   /DetectBlends true
  51.   /DownsampleColorImages true
  52.   /DownsampleGrayImages true
  53.   /DownsampleMonoImages true
  54.   /EmitDSCWarnings false
  55.   /EncodeColorImages true
  56.   /EncodeGrayImages true
  57.   /EncodeMonoImages true
  58.   /EndPage -1
  59.   /GrayACSImageDict .defaultImageDict
  60.   /GrayImageDepth -1
  61.   /GrayImageDict .defaultImageDict
  62.   /GrayImageDownsampleThreshold 1.5
  63.   /GrayImageFilter /DCTEncode
  64.   /ImageMemory 500000
  65.   /LockDistillerParams false
  66.   /MaxSubsetPct 100
  67.   /MonoImageDepth -1
  68.   /MonoImageDict mark
  69.     /K -1
  70.   .dicttomark readonly
  71.   /MonoImageDownsampleThreshold 1.5
  72.   /MonoImageFilter /CCITTFaxEncode
  73.   /OPM 1
  74.   /Optimize true
  75.   /ParseDSCComments true
  76.   /ParseDSCCommentsForDocInfo true
  77.   /PreserveCopyPage true
  78.   /PreserveEPSInfo true
  79.   /PreserveHalftoneInfo false
  80.   /StartPage 1
  81.   /SubsetFonts true
  82.   /TransferFunctionInfo /Preserve
  83.   /UseFlateCompression true
  84.   /UsePrologue false
  85. .dicttomark readonly def
  86.  
  87. /.distillersettings mark
  88.  
  89. /default mark
  90.   /AutoRotatePages /PageByPage
  91.   /CannotEmbedFontPolicy /Warning
  92.   /DownsampleColorImages false
  93.   /DownsampleGrayImages false
  94.   /DownsampleMonoImages false
  95.   /Optimize false
  96. .dicttomark readonly
  97.  
  98. /screen mark
  99.   /AutoRotatePages /PageByPage
  100.   /CannotEmbedFontPolicy /Warning
  101.   /ColorConversionStrategy /sRGB
  102.   /ColorImageDownsampleType /Average
  103.   /ColorImageResolution 72
  104.   /CompatibilityLevel 1.2
  105.   /CreateJobTicket false
  106.   /DoThumbnails false
  107.   /DownsampleColorImages true
  108.   /DownsampleGrayImages true
  109.   /DownsampleMonoImages true
  110.   /EmbedAllFonts false
  111.   /GrayImageDownsampleType /Average
  112.   /GrayImageResolution 72
  113.   /MonoImageDownsampleType /Average
  114.   /MonoImageResolution 300
  115.   /ParseDSCCommentsForDocInfo false
  116.   /PreserveOPIComments false
  117.   /PreserveOverprintSettings false
  118.   /UCRandBGInfo /Remove
  119. .dicttomark readonly
  120.  
  121. /.printerACSImageDict mark
  122.   /QFactor 0.55 /Blend 1
  123.   /HSamples [2 1 1 2] /VSamples [2 1 1 2]
  124. .dicttomark readonly def
  125. /printer mark
  126.   /AutoRotatePages /None
  127.   /CannotEmbedFontPolicy /Warning
  128.   /ColorACSImageDict .printerACSImageDict
  129.   /ColorConversionStrategy /UseDeviceIndependentColor
  130.   /ColorImageDownsampleType /Bicubic
  131.   /ColorImageResolution 300
  132.   /CompatibilityLevel 1.3
  133.   /CreateJobTicket true
  134.   /DoThumbnails false
  135.   /EmbedAllFonts true
  136.   /GrayACSImageDict .printerACSImageDict
  137.   /GrayImageDownsampleType /Bicubic
  138.   /GrayImageResolution 300
  139.   /MonoImageDownsampleType /Bicubic
  140.   /MonoImageResolution 1200
  141.   /ParseDSCCommentsForDocInfo true
  142.   /PreserveOPIComments true
  143.   /PreserveOverprintSettings true
  144.   /UCRandBGInfo /Preserve
  145. .dicttomark readonly
  146.  
  147. /.prepressACSImageDict mark
  148.   /QFactor 0.25
  149.   /HSamples [1 1 1 1] /VSamples [1 1 1 1]
  150. .dicttomark readonly def
  151. /prepress mark
  152.   /AutoRotatePages /None
  153.   /CannotEmbedFontPolicy /Error
  154.   /ColorACSImageDict .prepressACSImageDict
  155.   /ColorConversionStrategy /LeaveColorUnchanged
  156.   /ColorImageDownsampleType /Bicubic
  157.   /ColorImageResolution 300
  158.   /CompatibilityLevel 1.3
  159.   /CreateJobTicket true
  160.   /DoThumbnails true
  161.   /EmbedAllFonts true
  162.   /GrayACSImageDict .prepressACSImageDict
  163.   /GrayImageDownsampleType /Bicubic
  164.   /GrayImageResolution 300
  165.   /MonoImageDownsampleType /Bicubic
  166.   /MonoImageResolution 1200
  167.   /ParseDSCCommentsForDocInfo true
  168.   /PreserveOPIComments true
  169.   /PreserveOverprintSettings true
  170.   /UCRandBGInfo /Preserve
  171. .dicttomark readonly
  172.  
  173. .dicttomark readonly def
  174.  
  175. % ---------------- End of predefined configurations ---------------- %
  176.  
  177. % Set optimizations for converting PostScript to PDF.
  178. % The ps2pdf* scripts invoke this.
  179. /.setpdfwrite {        % - .setpdfwrite -
  180.         % Set a large VM threshold to reduce garbage collection.
  181.   currentuserparams /VMThreshold get 3000000 .max setvmthreshold
  182.         % Install a level of 'save' to reduce font loading.
  183.   save pop
  184. } bind def
  185.  
  186. % ---------------- pdfmark and DSC processing ---------------- %
  187.  
  188. % Encode values to pass for the /pdfmark or /DSC pseudo-parameter.
  189. /.pdf===dict mark
  190.   /arraytype
  191.    { dup xcheck { ({) (}) } { ([) (]) } ifelse
  192.         % Stack: file obj left right
  193.       4 1 roll 2 index exch writestring () exch
  194.        { exch 2 index exch writestring
  195.      1 index exch pdf===only ( )
  196.        }
  197.       forall pop exch writestring
  198.    } bind
  199.   /packedarraytype 1 index
  200.   /dicttype
  201.    { 1 index (<<\n) writestring
  202.       { 2 index 3 -1 roll pdf===only 1 index ( ) writestring
  203.     1 index exch pdf===only dup (\n) writestring
  204.       }
  205.      forall (>>) writestring
  206.    } bind
  207. .dicttomark readonly def
  208. /pdf===only {    % <file> <obj> pdf===only -
  209.   .pdf===dict 1 index type .knownget { exec } { write===only } ifelse
  210. } bind def
  211. /.pdfcvbuf 10 string def    % enough for most arguments
  212. userdict /.pdfcvstring () put
  213. /.pdfcvs {        % <obj> .pdfcvs <string>
  214.   currentglobal exch false .setglobal
  215.   /.pdfcvstring () store
  216.         % We can't handle long values yet.
  217.   { pop dup length 0 eq { pop } {
  218.       /.pdfcvstring .pdfcvstring 3 -1 roll concatstrings store
  219.     } ifelse //.pdfcvbuf
  220.   } /NullEncode filter dup 3 -1 roll pdf===only
  221.   closefile
  222.   .setglobal .pdfcvstring
  223. } bind def
  224.  
  225. % Redefine pdfmark to pass the data to the driver.
  226. % We use a pseudo-parameter named /pdfmark whose value is an array:
  227. %    /key1 (value1) ... (CTM) /type
  228. /.pdfputparams {    % -mark- <key1> <value1> ... .pdfputparams <result...>
  229.   currentdevice null false counttomark 1 add 3 roll
  230.         % Don't allow the page device to get cleared....
  231.   {.putdeviceparams} .currentpagedevice pop {.setpagedevice} 3 .execn
  232. } bind def
  233. % Convert relevant operands to strings in an array.
  234. /.pdfcvsloop {        % -mark- values ... markname start step .pdfcvsloop
  235.             %   [values ... ctm markname]
  236.    matrix currentmatrix .pdfcvs 4 1 roll
  237.    counttomark 1 add 2 roll 
  238.    counttomark .localvmarray astore exch pop
  239.    3 1 roll
  240.             % Stack: values start step
  241.    2 index length 3 sub { 2 copy 2 copy get .pdfcvs put pop } for
  242. } bind def
  243. /.pdfcvsall {        % -mark- values ... markname .pdfcvsall <<same>>
  244.   0 1 .pdfcvsloop
  245. } bind def
  246. /.pdfcvseven {        % -mark- key value ... markname .pdfcvseven <<same>>
  247.   1 2 .pdfcvsloop
  248. } bind def
  249. /.pdfcvsnone {        % -mark- values ... markname .pdfcvsnone <<same>>
  250.   100000 1 .pdfcvsloop
  251. } bind def
  252. /.pdfcvsfirst {        % -mark- first values ... markname .pdfcvsfirst<<same>>
  253.   .pdfcvsnone
  254.   dup 0 2 copy get .pdfcvs put
  255. } bind def
  256. % The procedures in the following dictionary are called with the entire
  257. % pdfmark operand list (including the pdfmark name) on the stack;
  258. % they may modify this ad lib.  They must call .pdfcvsxxx.
  259. /.pdfmarkparams mark
  260.     % Unpack a dictionary for PUT, and don't convert stream data.
  261.   /PUT {
  262.     counttomark 3 eq {
  263.       1 index type /dicttype eq {
  264.     pop { } forall /.PUTDICT .pdfcvsall
  265.       } {
  266.     pop dup type /filetype eq {
  267.         % Read the file into a sequence of strings.
  268.         % This isn't great, but it's simple.
  269.       {
  270.         dup 1000 string readstring not { exch exit } if
  271.         exch
  272.       } loop closefile
  273.     } if
  274.     /.PUTSTREAM .pdfcvsfirst
  275.       } ifelse
  276.     } {
  277.       .pdfcvsall
  278.     } ifelse
  279.   } bind
  280.     % Unpack the array for PUTINTERVAL.
  281.   /PUTINTERVAL {
  282.     pop aload pop /.PUTINTERVAL .pdfcvsall
  283.   } bind
  284. .dicttomark readonly def
  285. /.pdfparamerror {    % ? ? ? -mark- ... <errname> <opname> .pdfparamerror -
  286.     counttomark 4 add 2 roll cleartomark pop pop pop
  287.     .systemvar exch signalerror
  288. } bind def
  289. /pdfmark {        % -mark- <key> <value> ... <markname> pdfmark -
  290.   counttomark 1 add copy
  291.   //.pdfmarkparams 1 index .knownget { exec } { .pdfcvsall } ifelse
  292.   mark /pdfmark 3 -1 roll .pdfputparams
  293.   dup type /booleantype ne {
  294.     /pdfmark .pdfparamerror
  295.   } if cleartomark
  296. } odef
  297. userdict /pdfmark .undef
  298. currentdict /.pdfmarkparams .undef
  299.  
  300. % Use the DSC processing hook to pass DSC comments to the driver.
  301. % We use a pseudo-parameter named DSC whose value is an array:
  302. %    /key1 (value1) ... /type
  303. /.pdfdsc_dict 2 dict def
  304. /.pdfdsc {    % <file> <DSC string> <dsc dict> [<prev proc>] .pdfdsc -
  305.   0 get dup null ne { 4 copy exch pop exec } { pop } ifelse 3 -1 roll pop
  306.         % Stack: <dsc string> <dsc dict>
  307.   20 .localvmdict 1 index { 3 copy put pop pop } forall
  308.   3 -1 roll .parse_dsc_comments    % <dsc dict> <dict> <type>
  309.   dup /NOP ne 2 index length 1 gt or {    % Skip unparsed comments
  310.     DEBUG { (**** DSC comment: ) print dup == 1 index === flush } if
  311.     exch mark 4 1 roll {
  312.         % mark <key1> <value1> ... <dsc dict> <type> <key> <value>
  313.       3 index 2 index known {    % Skip the DSC_struct entry
  314.         pop pop
  315.       } {
  316.         .pdfcvs 4 -2 roll
  317.       } ifelse
  318.     } forall exch pop counttomark .localvmarray astore
  319.     mark /DSC 3 -1 roll .pdfputparams
  320.     dup type /booleantype ne {
  321.       /DSC .pdfparamerror
  322.     } {
  323.       cleartomark
  324.     } ifelse
  325.   } {
  326.     pop pop pop
  327.   } ifelse
  328. } bind def
  329. /.initialize_dsc_parser where {
  330.   pop 2 dict dup .initialize_dsc_parser readonly
  331.   currentuserparams /ProcessDSCComment get
  332.   1 array astore    % in case the value is executable
  333.   //.pdfdsc /exec load 4 array astore cvx readonly
  334.   << /ProcessDSCComment 3 -1 roll >> setuserparams
  335. } if
  336.  
  337. % ---------------- {set,current}distillerparams ---------------- %
  338.  
  339. % Define setdistillerparams / currentdistillerparams.
  340. % Distiller parameters are currently treated as device parameters.
  341. /.distillerparamkeys mark
  342.         % General parameters -- all distillers
  343.   /ASCII85EncodePages { }
  344.   /AutoRotatePages { }
  345.   /Binding { }
  346.   /CompressPages { }
  347.   /DefaultRenderingIntent { }
  348.   /DetectBlends { }
  349.   /DoThumbnails { }
  350.   /ImageMemory { }
  351.   /LockDistillerParams { }
  352.   /LZWEncodePages { }
  353.   /OPM { }
  354.   /PreserveHalftoneInfo { }
  355.   /PreserveOPIComments { }
  356.   /PreserveOverprintSettings { }
  357.   /TransferFunctionInfo { }
  358.   /UCRandBGInfo { }
  359.   /UseFlateCompression { }
  360.         % General parameters -- PDF writer
  361.         % StartPage and EndPage are renamed because EndPage
  362.         % clashes with a page device parameter.
  363.   /CoreDistVersion { }
  364.   /CompatibilityLevel { }
  365.         % ****** NOTE: StartPage and EndPage are disabled because
  366.         % ****** EndPage clashes with a page device parameter.
  367. %  /EndPage { exch pop /PDFEndPage exch }
  368.     /PDFEndPage { pop pop }
  369. %  /StartPage { exch pop /PDFStartPage exch }
  370.     /PDFStartPage { pop pop }
  371.   /Optimize { }
  372.   /ParseDSCCommentsForDocInfo { }
  373.   /ParseDSCComments { }
  374.   /EmitDSCWarnings { }
  375.   /CreateJobTicket { }
  376.   /PreserveEPSInfo { }
  377.   /AutoPositionEPSFiles { }
  378.   /PreserveCopyPage { }
  379.   /UsePrologue { }
  380.         % Color sampled image parameters
  381.   /ColorACSImageDict { }
  382.   /AntiAliasColorImages { }
  383.   /AutoFilterColorImages { }
  384.   /ColorImageDepth { }
  385.   /ColorImageDict { }
  386.   /DownsampleColorImages { }
  387.   /ColorImageDownsampleThreshold { }
  388.   /ColorImageDownsampleType { }
  389.   /EncodeColorImages { }
  390.   /ColorImageFilter { }
  391.   /ColorImageResolution { }
  392.         % Color processing parameters
  393.   /CalCMYKProfile { }
  394.   /CalGrayProfile { }
  395.   /CalRGBProfile { }
  396.   /sRGBProfile { }
  397.   /ColorConversionStrategy { }
  398.   /ConvertCMYKImagesToRGB { }
  399.   /ConvertImagesToIndexed { }
  400.         % Grayscale sampled image parameters
  401.   /GrayACSImageDict { }
  402.   /AntiAliasGrayImages { }
  403.   /AutoFilterGrayImages { }
  404.   /GrayImageDepth { }
  405.   /GrayImageDict { }
  406.   /DownsampleGrayImages { }
  407.   /GrayImageDownsampleThreshold { }
  408.   /GrayImageDownsampleType { }
  409.   /EncodeGrayImages { }
  410.   /GrayImageFilter { }
  411.   /GrayImageResolution { }
  412.         % Monochrome sampled image parameters
  413.   /AntiAliasMonoImages { }
  414.   /MonoImageDepth { }
  415.   /MonoImageDict { }
  416.   /DownsampleMonoImages { }
  417.   /MonoImageDownsampleThreshold { }
  418.   /MonoImageDownsampleType { }
  419.   /EncodeMonoImages { }
  420.   /MonoImageFilter { }
  421.   /MonoImageResolution { }
  422.         % Font embedding parameters
  423.   /AlwaysEmbed
  424.    { dup length 0 gt
  425.       { dup 0 get false eq
  426.          { dup length 1 sub 1 exch getinterval exch pop /~AlwaysEmbed exch
  427.          } if
  428.       } if
  429.    }
  430.   /NeverEmbed
  431.    { dup length 0 gt
  432.       { dup 0 get false eq
  433.          { dup length 1 sub 1 exch getinterval exch pop /~NeverEmbed exch
  434.          } if
  435.       } if
  436.    }
  437.   /CannotEmbedFontPolicy { }
  438.   /EmbedAllFonts { }
  439.   /MaxSubsetPct { }
  440.   /SubsetFonts { }
  441. .dicttomark readonly def
  442. /.distillerdevice
  443.  { currentdevice .devicename /pdfwrite eq
  444.     { currentdevice }
  445.     { /pdfwrite finddevice }
  446.    ifelse
  447.  } bind def
  448. /setdistillerparams {        % <dict> setdistillerparams -
  449.   .distillerdevice null false mark 4 index {
  450.     //.distillerparamkeys 2 index .knownget { exec } { pop pop } ifelse
  451.   } forall .putdeviceparams
  452.   dup type /booleantype ne {
  453.     /setdistillerparams .pdfparamerror
  454.   } {
  455.     pop pop pop
  456.   } ifelse
  457. } odef
  458. /currentdistillerparams {    % - currentdistillerparams <dict>
  459.   .distillerdevice //.distillerparamkeys .getdeviceparams .dicttomark
  460.         % Patch StartPage and EndPage
  461.         % ****** NOTE: StartPage and EndPage are disabled because
  462.         % ****** EndPage clashes with a page device parameter.
  463. %  begin /StartPage PDFStartPage /EndPage PDFEndPage
  464. %  currentdict dup /PDFStartPage undef /PDFEndPage undef
  465. %  def def currentdict end
  466. } odef
  467.  
  468. % Patch 'where' so that the distillerparams operators are only visible
  469. % if the pdfwrite device is the current one, for the benefit of badly
  470. % designed PostScript files that "know" they have to do something different
  471. % if a distiller is processing them.
  472. .wheredict /currentdistillerparams {
  473.   currentdevice .devicename /pdfwrite eq {
  474.     .where
  475.   } {
  476.     .where pop dup //systemdict eq { pop false } { true } ifelse
  477.   } ifelse
  478. } bind put
  479. .wheredict /setdistillerparams .wheredict /currentdistillerparams get put
  480.  
  481. % Set a predefined configuration if PDFSETTINGS is defined.
  482. /PDFSETTINGS where { pop /PDFSETTINGS load } { /default } ifelse
  483. .distillersettings exch get
  484. % Don't override parameters defined on the command line.
  485. dup length .distillercommon length add dict begin
  486. .distillercommon 2 {
  487.   {
  488.     systemdict 2 index known { pop pop } { def } ifelse
  489.   } forall
  490. } repeat
  491. currentdict end setdistillerparams
  492.